"""
    开放封闭的原则
    已经实现的代码不要发生改动，对外扩展功能

     装饰器用到闭包
     闭包：两个函数，内部函数用到了外包函数的形参

    扩展：
        在打印a之前，打印1，在打印a之后，打印一个2

    装饰器作用：
            1、做权限校验
            2、做日志灯印

"""
def fun1(f):
    def fun2():
        print(1)
        f()
        print(2)
    return fun2  # 返回的函数的引用

# @fun1
def a():
    print("a")

# a()
a = fun1(a)
a()